﻿using System;
using System.Text;
using System.Text.RegularExpressions;

namespace IceCS.IceRegularExpression
{
    public class RegExpHelper
    {
        public static void GetRegExp()
        {
            var regexp = new Regex("aaa");
        }

        public static void Test1()
        {
            var content = "start XaaX bb XaaX cc XddX aa end";
            var regexp = new Regex("X[a-zA-Z]+X");
            //匹配第一个符合条件的结果
            var result = regexp.Match(content);
            if (result.Success)
            {
                Console.WriteLine(result.Value);
            }
            //匹配所有符合条件的结果
            MatchCollection result2 = regexp.Matches(content);
            foreach (Match r in result2)
            {
                Console.WriteLine(r.Value);
            }
        }

        public static void TestSingleline()
        {
            /* 
             * 指定单行模式。更改点 (.) 的含义，使它与每一个字符匹配（而不是与除 \n 之外的每个字符匹配）。 
             * 这是MSDN上面的解释。在正则表达式中"."是与"\n"之外的所有字符匹配的。当使用Singleline的时候，
             * 在使用"."的情况下会实现跨行匹配，在使用Multiline的时候不会实现跨行匹配。
             */
            StringBuilder input = new StringBuilder();
            input.AppendLine("line1 XaaX bb XaaX cc XddX aa line1");
            input.AppendLine("line2 XaaX cc XddX aa line2");
            var content = input.ToString();
            Console.WriteLine("原始文本："+content);
            string pattern = @"line1.*";
            MatchCollection matchCol = Regex.Matches(content, pattern);
            foreach (Match item in matchCol)
            {
                Console.WriteLine("结果1：{0}", item.Value);
            }
            //会把所有文本当作在一行进行匹配
            matchCol = Regex.Matches(content, pattern, RegexOptions.Singleline);
            foreach (Match item in matchCol)
            {
                Console.WriteLine("结果2：{0}", item.Value);
            }
        }

        public static void TestMultiline()
        {
            /*
             * 多行模式。更改 ^ 和 $ 的含义，使它们分别在任意一行的行首和行尾匹配，而不仅仅在整个字符串
             * 的开头和结尾匹配（MSDN）。 在正则表达式中，"^"和 "$"表示匹配文本的开头的结束，但是在
             * Multiline的情况下是在任意一行的行首和行尾匹配。
             */
            StringBuilder input = new StringBuilder();
            input.AppendLine("line1 XaaX bb XaaX cc XddX aa line1");
            input.AppendLine("line2 XaaX cc XddX aa line2");
            var content = input.ToString();
            Console.WriteLine("原始文本：" + content);
            string pattern = @"^line1.*";
            MatchCollection matchCol = Regex.Matches(content, pattern);
            foreach (Match item in matchCol)
            {
                Console.WriteLine("结果1：{0}", item.Value);
            }
            //会把所有文本当作在一行进行匹配
            matchCol = Regex.Matches(content, pattern, RegexOptions.Multiline);
            foreach (Match item in matchCol)
            {
                Console.WriteLine("结果2：{0}", item.Value);
            }
        }
    }
}
